home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 11 / CU Amiga Magazine's Super CD-ROM 11 (1997)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1997-06].iso / cucd / programming / oberonv4 / source / system / backup.mod (.txt) < prev    next >
Oberon Text  |  1994-06-23  |  5KB  |  149 lines

  1. Syntax10.Scn.Fnt
  2. Syntax10i.Scn.Fnt
  3. Syntax10b.Scn.Fnt
  4. MODULE Backup;    (*JG 30.1.93, MP 30.1.94 *)
  5. IMPORT SYSTEM, Diskette, Oberon, Texts, Viewers, MenuViewers, TextFrames;
  6. CONST StandardMenu = "System.Close System.Copy System.Grow Edit.Search Edit.Store";
  7. VAR W: Texts.Writer; diroption: CHAR;
  8. PROCEDURE Format*;
  9. BEGIN
  10.   Texts.WriteString(W, "Backup.Format"); Texts.WriteLn(W);
  11.   Texts.Append(Oberon.Log, W.buf);
  12.   Diskette.Format; Diskette.InitDir; Diskette.WriteDir
  13. END Format;
  14. PROCEDURE Init*;
  15. BEGIN
  16.   Texts.WriteString(W, "Backup.Init"); Texts.WriteLn(W);
  17.   Texts.Append(Oberon.Log, W.buf);
  18.   Diskette.InitDir; Diskette.WriteDir
  19. END Init;
  20. PROCEDURE SetDrive*;   (* MP *)
  21.   VAR par: Oberon.ParList; R:Texts.Reader;
  22.       ch:CHAR;
  23. BEGIN
  24.   par := Oberon.Par;
  25.   Texts.OpenReader(R, par.text, par.pos); REPEAT Texts.Read(R,ch) UNTIL ch#" ";
  26.   Texts.WriteString(W, "Backup.SetDrive "); Texts.Write(W,ch); Texts.WriteLn(W);
  27.   Texts.Append(Oberon.Log, W.buf);
  28.   Diskette.SetDrive(ORD(ch)-ORD("0"));
  29. END SetDrive;
  30. PROCEDURE List (name: ARRAY OF CHAR; date, time: LONGINT; size: LONGINT);
  31. BEGIN
  32.   Texts.WriteString(W, name);
  33.   IF diroption = "d" THEN
  34.     Texts.WriteDate(W, time, date); Texts.Write(W, " "); Texts.WriteInt(W, size, 1)
  35.   END;
  36.   Texts.WriteLn(W)
  37.   END List;
  38. PROCEDURE Directory*;
  39. VAR par: Oberon.ParList; T: Texts.Text; R: Texts.Reader; V: Viewers.Viewer;
  40.     date, time: LONGINT; nofEntries, nofClusters, X, Y: INTEGER; ch: CHAR;
  41. BEGIN
  42.   par := Oberon.Par;
  43.   Texts.OpenReader(R, par.text, par.pos); Texts.Read(R, ch);
  44.   WHILE ch = " " DO Texts.Read(R, ch) END;
  45.   IF ch = "/" THEN Texts.Read(R, diroption) ELSE diroption := 0X END;
  46.   Diskette.ReadDir;
  47.   Diskette.GetData(date, time, nofEntries, nofClusters);
  48.   Texts.WriteInt(W, nofEntries, 1); Texts.WriteString(W, " entries/ ");
  49.   Texts.WriteInt(W, nofClusters, 1); Texts.WriteString(W, " clusters");
  50.   Texts.WriteLn(W);
  51.   Diskette.Enumerate(List);
  52.   T := TextFrames.Text("");
  53.   Texts.Append(T, W.buf);
  54.   Oberon.AllocateSystemViewer(Oberon.Par.vwr.X, X, Y);
  55.   V := MenuViewers.New(
  56.        TextFrames.NewMenu("Backup.Directory", StandardMenu),
  57.        TextFrames.NewText(T, 0),
  58.        TextFrames.menuH,
  59.        X, Y)
  60. END Directory;
  61. PROCEDURE Read (name: ARRAY OF CHAR; date, time: LONGINT; size: LONGINT);
  62. BEGIN
  63.   Texts.WriteString(W, name); Texts.WriteString(W, " reading");
  64.   Texts.Append(Oberon.Log, W.buf);
  65.   Diskette.ReadFile(name);
  66.   IF Diskette.res # 0 THEN Texts.WriteString(W, " failed") END;
  67.   Texts.WriteLn(W);
  68.   Texts.Append(Oberon.Log, W.buf)
  69. END Read;
  70. PROCEDURE ReadAll*;
  71. BEGIN
  72.   Texts.WriteString(W, "Backup.ReadAll"); Texts.WriteLn(W);
  73.   Texts.Append(Oberon.Log, W.buf);
  74.   Diskette.ReadDir; Diskette.Enumerate(Read)
  75.   END ReadAll;
  76. PROCEDURE ReadFiles*;
  77. VAR par: Oberon.ParList; S: Texts.Scanner; T: Texts.Text;
  78.     beg, end, time: LONGINT;
  79. BEGIN
  80.   par := Oberon.Par;
  81.   Texts.WriteString(W, "Backup.ReadFiles"); Texts.WriteLn(W);
  82.   Texts.Append(Oberon.Log, W.buf);
  83.   Diskette.ReadDir;
  84.   par := Oberon.Par;
  85.   Texts.OpenScanner(S, par.text, par.pos); Texts.Scan(S);
  86.   WHILE S.class = Texts.Name DO Read(S.s, 0, 0, 0); Texts.Scan(S) END;
  87.   IF (S.class = Texts.Char) & (S.c = "^") THEN
  88.     Oberon.GetSelection(T, beg, end, time);
  89.     IF time >= 0 THEN Texts.OpenScanner(S, T, beg); Texts.Scan(S);
  90.       IF S.class = Texts.Name THEN Read(S.s, 0, 0, 0) END
  91.     END
  92.   END
  93. END ReadFiles;
  94. PROCEDURE WriteFile (VAR name: ARRAY OF CHAR);
  95. BEGIN
  96.   Texts.WriteString(W, name); Texts.WriteString(W, " writing");
  97.   Texts.Append(Oberon.Log, W.buf);
  98.   Diskette.WriteFile(name);
  99.   IF Diskette.res # 0 THEN Texts.WriteString(W, " failed") END;
  100.   Texts.WriteLn(W);
  101.   Texts.Append(Oberon.Log, W.buf)
  102. END WriteFile;
  103. PROCEDURE WriteFiles*;
  104. VAR par: Oberon.ParList; S: Texts.Scanner; T: Texts.Text; beg,end,time: LONGINT;
  105. BEGIN
  106.   par := Oberon.Par;
  107.   Texts.WriteString(W, "Backup.WriteFiles"); Texts.WriteLn(W);
  108.   Texts.Append(Oberon.Log, W.buf);
  109.   Diskette.ReadDir;
  110.   Texts.OpenScanner(S, par.text, par.pos); Texts.Scan(S);
  111.   WHILE S.class = Texts.Name DO WriteFile(S.s); Texts.Scan(S) END;
  112.   IF (S.class = Texts.Char) & (S.c = "^") THEN
  113.     Oberon.GetSelection(T,beg,end,time);
  114.     IF time >= 0 THEN Texts.OpenScanner(S, T, beg); Texts.Scan(S);
  115.       IF S.class = Texts.Name THEN WriteFile(S.s) END
  116.     END
  117.   END;
  118.   Diskette.WriteDir
  119. END WriteFiles;
  120. PROCEDURE DeleteFile (VAR name: ARRAY OF CHAR);
  121. BEGIN
  122.   Texts.WriteString(W, name); Texts.WriteString(W, " deleting");
  123.   Texts.Append(Oberon.Log, W.buf);
  124.   Diskette.DeleteFile(name);
  125.   IF Diskette.res # 0 THEN Texts.WriteString(W, " failed") END;
  126.   Texts.WriteLn(W);
  127.   Texts.Append(Oberon.Log, W.buf)
  128. END DeleteFile;
  129. PROCEDURE DeleteFiles*;
  130. VAR par: Oberon.ParList; T: Texts.Text; S: Texts.Scanner;
  131.     beg, end, time: LONGINT;
  132. BEGIN
  133.   par := Oberon.Par;
  134.   Texts.WriteString(W, "Backup.DeleteFiles"); Texts.WriteLn(W);
  135.   Texts.Append(Oberon.Log, W.buf);
  136.   Diskette.ReadDir;
  137.   Texts.OpenScanner(S, par.text, par.pos); Texts.Scan(S);
  138.   WHILE S.class = Texts.Name DO DeleteFile(S.s); Texts.Scan(S) END;
  139.   IF (S.class = Texts.Char) & (S.c = "^") THEN
  140.     Oberon.GetSelection(T, beg, end, time);
  141.     IF time >= 0 THEN Texts.OpenScanner(S, T, beg); Texts.Scan(S);
  142.       IF S.class = Texts.Name THEN DeleteFile(S.s) END
  143.     END
  144.   END;
  145.   Diskette.WriteDir
  146. END DeleteFiles;
  147. BEGIN Texts.OpenWriter(W); Diskette.Reset
  148. END Backup.
  149.